package src.application.Doppelkopf;

import java.util.*;

/**
 * Die Klasse realisiert ein Doppelkopf Kartendeck. Dieses besteht aus den
 * Karten 10, Bube, Dame, Koenig, Ass aller Farben, die jedoch alle doppelt
 * vorhanden sind.
 *
 * @author Lucksch
 */
public class Deck {

    ArrayList<Karte> karten;

    /**
     * Konstruktor Es wird eine ArrayList angelegt, in der alle Karten
     * gespeichert werden. Dazu wird zwei mal die Mathode erstelleDeck()
     * aufgerufen.
     */
    public Deck() {
        karten = new ArrayList<Karte>();
        erstelleDeck();
        erstelleDeck();
        System.out.println(karten.size());
    }

    /**
     * Diese Methode erstellt jede Karte eines Doppelkopfspiels einmal und fügt
     * sie der ArrayList karten hinzu(trumpf wird hier noch nicht gesetzt).
     */
    public void erstelleDeck() {
        char farbe = ' ';
        Karte k1, k2, k3, k4, k5;
        for (int i = 0; i < 4; i++) {
            switch (i) {
                case 0:
                    farbe = 'd';
                    break;
                case 1:
                    farbe = 'h';
                    break;
                case 2:
                    farbe = 'p';
                    break;
                case 3:
                    farbe = 'k';
                    break;
            }
            k1 = new Karte(2, farbe); // Bube der jeweiligen Farbe
            k2 = new Karte(3, farbe); //Dame der jeweiligen Farbe
            k3 = new Karte(4, farbe); // K�nig der jeweiligen Farbe
            k4 = new Karte(10, farbe); // 10 der jeweiligen Farbe
            k5 = new Karte(11, farbe); // Ass der jeweiligen Farbe

            karten.add(k1);
            karten.add(k2);
            karten.add(k3);
            karten.add(k4);
            karten.add(k5);
        }

    }

    /**
     * Die Methode mischt die erstellte ArrayList karten zufaellig.
     */
    public void mische() {
        Collections.shuffle(karten, new Random());

    }

    /**
     * Die Methode setzt den Trumpf im Kartendeck je nach Spielart. Bei
     * Fleischlos ist gar keine Karte Trumpf, Buben bzw. Damensolo nur die Buben
     * bzw Damen und bei einem Normalspiel foolgende Karten in angegebener
     * Reihenfolge(von niedrig bis hoch): KaroKoenig, Karo10, KaroAss, alle
     * Buben, alle Damen(nach der Farbreihenfolge), Herz10
     *
     * @param spielart Zahlenwert fuer die Spielart nach der gespielt wird
     */
    public void setTrumpf(int spielart) {
        for (Karte alle : karten) {
            alle.setSpielart(spielart);
        }

        switch (spielart) {
            case 0:
                for (Karte normal : karten) {
                    if (normal.getFarbe() == ('d') || normal.getWert() == 2 || normal.getWert() == 3
                            || normal.getWert() == 10 && normal.getFarbe() == ('h')) {
                        normal.setTrumpf(true);
                    } else {
                        normal.setTrumpf(false);
                    }
                }
                break;

            case 1:
                for (Karte buben : karten) {
                    if (buben.getWert() == 2) {
                        buben.setTrumpf(true);
                    } else {
                        buben.setTrumpf(false);
                    }
                }
                break;

            case 2:
                for (Karte damen : karten) {
                    if (damen.getWert() == 3) {
                        damen.setTrumpf(true);
                    } else {
                        damen.setTrumpf(false);
                    }
                }
                break;

            case 3:
                for (Karte keine : karten) {
                    keine.setTrumpf(false);
                }
                break;
            case 4: break;
            case 5: break;
            case 6: break;
            default:
                System.out.println("Fehlerhafte Eingabe");
        }
    }

    /**
     * Gibt die erste Karte in der ArrayList zurueck und loescht aus dem
     * Deck(wird zum Verteilen der Spielkarten gebraucht).
     *
     * @return k Erste Karte im der ArrayList
     */
    public Karte ziehe() {
        Karte k;
        k = karten.get(0);
        karten.remove(0);
        return k;
    }
/**
    public static void main(String[] args) {
        Deck d1 = new Deck();
        Deck d2 = new Deck();
        d1.setTrumpf(0);
        d2.setTrumpf(0);
        System.out.println("Karten des Decks ungemischt.\n");
        for (Karte alle : d1.karten) {
            System.out.println(alle.toString());
        }

        System.out.println("\nHier wird gemischt!\n");
        d2.mische();
        d1.mische();

        System.out.println("Gemischte Karten des ersten Decks:\n");
        for (Karte alle : d1.karten) {
            System.out.println(alle.toString());
        }

        System.out.println("Gemischte Karten des zweiten Decks:\n");
        for (Karte alle : d2.karten) {
            System.out.println(alle.toString());
        }

        
    }**/
}
